﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLLopHoc.XuLyDuLieu;
using QLLopHoc.DoiTuongDuLieu;
using QLLopHoc.KetNoiDatabase;


namespace QLLopHoc
{
    public partial class frmGiangVien : Form
    {
        public frmGiangVien()
        {
            InitializeComponent();
        }
        DataTable dt = null;
        //đối tượng để gắn kết dữ liệu (DataTable) với các control 
        BindingSource bs = new BindingSource();
        private void frmGiangVien_Load(object sender, EventArgs e)
        {
            txtMaGV.ReadOnly = true;
            dt = XLGiangVien.LayBangGV();
            bs.DataSource = dt;
            //gắn kết các control vào dữ liệu 
            txtMaGV.DataBindings.Add("Text", bs, "MSGV");
            txtHoTen.DataBindings.Add("Text", bs, "HoTen");
            txtEmail.DataBindings.Add("Text", bs, "Email");
            txtTel.DataBindings.Add("Text", bs, "Tel");
            dgvDSGV.DataSource = bs;

            //xây dựng các cột cho lưới hiển thị 
            DataGridViewColumn dgvCol = null; //đối tượng thể hiện cột của lưới 
            //tạo cột số thứ tự 
            dgvCol = new DataGridViewTextBoxColumn();
            dgvCol.ReadOnly = true;
            dgvCol.Name = "colSTT";
            dgvCol.HeaderText = "STT";
            dgvCol.DisplayIndex = 0;
            dgvCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvDSGV.Columns.Add(dgvCol);
            //tạo cột mã số giảng viên 
            dgvCol = new DataGridViewTextBoxColumn();
             dgvCol.ReadOnly = true; 
            dgvCol.Name = "colMSGV"; 
            dgvCol.HeaderText = "MSGV"; 
            dgvCol.DataPropertyName = "MSGV"; 
            dgvCol.DisplayIndex = 1; 
            dgvCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
            dgvDSGV.Columns.Add(dgvCol); 
            //tạo cột họ tên giảng viên 
            dgvCol = new DataGridViewTextBoxColumn(); 
            dgvCol.Name = "colHoTen"; 
            dgvCol.HeaderText = "Họ tên"; 
            dgvCol.DataPropertyName = "HoTen"; 
            dgvCol.DisplayIndex = 2; 
            dgvCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
            dgvDSGV.Columns.Add(dgvCol); 
            //tạo cột email giảng viên 
            dgvCol = new DataGridViewTextBoxColumn(); 
            dgvCol.Name = "colEmail"; 
            dgvCol.HeaderText = "Email"; 
            dgvCol.DataPropertyName = "Email"; 
            dgvCol.DisplayIndex = 3; 
            dgvCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
            dgvDSGV.Columns.Add(dgvCol); 
            //tạo cột điện thoại giảng viên 
            dgvCol = new DataGridViewTextBoxColumn(); 
            dgvCol.Name = "colTel"; 
            dgvCol.HeaderText = "Điện thoại"; 
            dgvCol.DataPropertyName = "Tel"; 
            dgvCol.DisplayIndex = 4; 
            dgvCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
            dgvDSGV.Columns.Add(dgvCol); 
            //ẩn các cột sẵn có từ bảng dữ liệu 
            for(int i=5; i<9; ++i) 
                dgvDSGV.Columns[i].Visible = false; 
 
            //thiết lập các thuộc tính thể hiện của lưới 
            dgvDSGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader | DataGridViewAutoSizeColumnsMode.ColumnHeader; 
            dgvDSGV.RowHeadersVisible = false; 
            dgvDSGV.AllowUserToResizeRows = false; 
 
            //tạo giá trị cho cột STT 
            for (int i = 0; i < dgvDSGV.Rows.Count; ++i) 
                dgvDSGV.Rows[i].Cells["colSTT"].Value = i + 1; 
        }

        //private void dgvDSGV_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        //{
        //     string curValueCell = "";
        //} 
        private void dgvDSGV_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
        { 
            DataGridViewCell cell = dgvDSGV.CurrentCell; 
            switch (cell.ColumnIndex) 
            { 
                case 7: //cột email 
                case 8: //cột tel 
                    curValueCell = cell.Value.ToString(); 
                    break; 
            } 
        }

        public string curValueCell { get; set; }

        private void dgvDSGV_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewCell cell = dgvDSGV.CurrentCell; 
            switch (cell.ColumnIndex) 
            { 
                case 7: //cột email 
                    if (!XLGiangVien.KiemTraEmail(cell.Value.ToString())) 
                    { 
                        cell.Value = curValueCell;
                        MessageBox.Show("Email không hợp lệ!", "Error"); 
                    } 
                    break; 
 
                case 8: //cột tel 
                    { 
                        string error = XLGiangVien.KiemTraTel(cell.Value.ToString()); 
                        if (error != "") 
                        { 
                            cell.Value = curValueCell; 
                            MessageBox.Show(error, "Error"); 
                        } 
                    } 
                    break; 
                } 
        }

        private void dgvDSGV_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {
            DataGridViewCell cell = dgvDSGV.CurrentCell;
            //tạo giá trị cho cột STT 
            for (int i = 0; i < dgvDSGV.Rows.Count; ++i)
                dgvDSGV.Rows[i].Cells["colSTT"].Value = i + 1;
            dgvDSGV.Rows[cell.RowIndex].Cells["colMSGV"].Value = XLGiangVien.GenerateMSGV(dt);
        }
        List<int> dsIdRemove = new List<int>(); 
        private void dgvDSGV_RowLeave(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = dgvDSGV.CurrentRow;
            if (row.Index == dgvDSGV.Rows.Count - 1)
                return;
            if (row.Cells["colHoTen"].Value.ToString() == "" || row.Cells["colEmail"].Value.ToString() == "" || row.Cells["colTel"].Value.ToString() == "")
            {
                MessageBox.Show("Chưa đầy đủ thông tin!", "Error");
                if (!dsIdRemove.Contains(row.Index))
                    dsIdRemove.Add(row.Index);
            }
            else
            {
                if (dsIdRemove.Contains(row.Index))
                    dsIdRemove.Remove(row.Index);
            }
        }
        string curEmail = "";
        private void txtEmail_Enter(object sender, EventArgs e)
        {
            curEmail = txtEmail.Text;
        }
        string curTel = "";
        private void txtEmail_Leave(object sender, EventArgs e)
        {
            curTel = txtTel.Text;
        }

        private void txtTel_Leave(object sender, EventArgs e)
        {
            string error = XLGiangVien.KiemTraTel(txtTel.Text);
            if (error != "")
            {
                txtTel.Text = curTel;
                MessageBox.Show(error, "Error");
            } 
        }

        private void frmGiangVien_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn lưu lại những thay đổi?" + Environment.NewLine + "[Những dòng dữ liệu không hợp lệ sẽ không được lưu]", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes) 
            { 
                dsIdRemove.Sort(); 
                for (int i = dsIdRemove.Count - 1; i >= 0; --i) 
                { 
                    dt.Rows.RemoveAt(dsIdRemove[i]); 
                } 
                XLGiangVien.UpdateTableGV(dt); 
            } 
            else 
            { 
                e.Cancel = true; 
            }
        }
    }
}
